// 将宏声明在外部crate
use macro_test::*;

/// 声明宏
#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn test() {
        start();
    }
}

pub fn start() {
    // 使用了#![feature(trace_macros)]属性，注意此时必须使用 Nightly 版本 的 Rust 才能编译 。
    // 在代码 trace_macros!宏调用的上方，加上 trace_macros! (true)就 可以调试宏展开过程。
    // trace_macros!(true);
    let map_01 = hashmap_01!(1 => 1, 2 => 2);
    println!("{:?}", map_01);

    let map_02 = hashmap_02!(1 => 1, 2 => 2,);
    println!("{:?}--{}", map_02, map_02.capacity());

    let map_03 = hashmap_03!(1 => 1, 2 => 2,);
    println!("{:?}--{}", map_03, map_03.capacity());

    let map_04 = hashmap_04!(1 => 1, 2 => 2,);
    println!("{:?}--{}", map_04, map_04.capacity());

    let map_05 = hashmap_05!(1 => 1, 2 => 2,);
    println!("{:?}--{}", map_05, map_05.capacity());
    // trace_macros!(false);

    macro_test::hash::test_hash_print();
}
